package ch6;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

/**
 * 保障对外包装对象的遍历操作的线程安全
 * 同步集合（SynchronizedXXX）的iterator方法返回的Iterator实例并不是线程安全的
 * 为了保障对同步集合的遍历操作的线程安全性，需要对遍历操作进行加锁
 * 1. 需要以被遍历同步集合对象本身作为内部锁
 * 2. 选用的内部锁必须和相应的同步集合内部用于保障其自身线程安全所使用的锁保持一致
 */

public class SynCollectionSafeTraversal {
    final List<String> syncList = Collections.synchronizedList(new ArrayList<String>());

    public void dump() {
        Iterator<String> iterator = syncList.iterator();
        synchronized (syncList) {
            while (iterator.hasNext()) {
                System.out.println(iterator.next());
            }
        }
    }
}
